#include "Pkg.h"

// fare CheckFiles() x riaggiornare date e GetLastTime()

// GetField restituisce "" in caso di field nn trovato, ListFields restituisce un vettore empty() se il pacchetto
// non ha files, GetFiles restituisce un vettore empty() se nn ha file.

Pkg::Pkg() {
	// probabilmente nn ha senso dichiarlo qui dato ke il
	// costruttore non viene chiamato con new
enabled=false;
}

Pkg::~Pkg() {}

string Pkg::GetField(string field) {

      vector <string> ret;
      map<string,string>::iterator iter;

      iter = infos.find(field);
      if( iter != infos.end() )
	      return iter->second;
      return "";
}

void Pkg::SetField(string f, string c) {
    //prende a 2 a 2 stndrd, e setta campo-contenuto - da adattare AptList

      if(infos.find(f)!=infos.end()) {
	infos.erase(f);
      }

      infos.insert(pair<string,string>(f,c));
}

void Pkg::SetFile(string filename, char enabled) {

  FileObj tmp;
  struct stat buf;

    tmp.name=filename;
    tmp.enabled=enabled;

    if(stat(filename.c_str(), &buf)>=0) { 
      tmp.tm=buf.st_atime;
    }
    else tmp.tm=-1; //file non trovati hanno .tm=-1

    files.push_back(tmp);

}

/* Pick the biggest date only from enabled files */
time_t Pkg::GetLastAccess() {

  unsigned int i;
  int biggest=0;

   for(i=0;i<files.size();i++) {
     if(files[i].enabled=='Y' && files[i].tm>biggest) {
      biggest=files[i].tm;
      return biggest;
     }
   }

  return -1;

}

// da non chiamare direttamente se non attivato il campo info
vector<FileObj> Pkg::GetFiles() {
  return files;
}

map<string, string> Pkg::GetFields() {
  return infos;
}

// da cancellare, ora ke c'e' listfields
vector<string> Pkg::ListFields() {

      vector<string> toret;
      map<string,string>::iterator iter;

       if(files.empty()) return toret;

       for( iter = infos.begin(); iter != infos.end(); ++iter ) {
	toret.push_back(iter->first);
       }
       return toret;

}
